﻿
using System;
using System.Data.SqlClient;
using System.Globalization;
using System.Runtime.Serialization;
using ProtoBuf;/*https://github.com/ServiceStack/ServiceStack/tree/master/lib*/
using ServiceStack.Text;/*https://github.com/ServiceStack/ServiceStack.Text*/
using V82;
using V82.ОбщиеОбъекты;
using V82.ДокументыСсылка;
using V82.ДокументыОбъект;
using V82.ДокументыСсылка;
using V82.Перечисления;//Ссылка;
namespace V82.ДокументыОбъект
{
	[ProtoContract]
	[DataContract]
	public partial class ЗаявлениеАбонентаСпецоператораСвязи:ДокументОбъект
	{
		public bool _ЭтоНовый;
		public bool ЭтоНовый()
		{
			return _ЭтоНовый;
		}
		[DataMember]
		[ProtoMember(1)]
		public Guid Ссылка {get;set;}
		[DataMember]
		[ProtoMember(2)]
		public long Версия {get;set;}
		[DataMember]
		[ProtoMember(3)]
		public string ВерсияДанных {get;set;}
		/*static хэш сумма состава и порядка реквизитов*/
		/*версия класса восстановленного из пакета*/
		[DataMember]
		[ProtoMember(4)]
		public bool ПометкаУдаления {get;set;}
		[DataMember]
		[ProtoMember(5)]
		public DateTime Дата {get;set;}
		[DataMember]
		[ProtoMember(6)]
		public DateTime ПрефиксНомера {get;set;}
		[DataMember]
		[ProtoMember(7)]
		public string/*11*/ Номер {get;set;}
		[DataMember]
		[ProtoMember(8)]
		public bool Проведен {get;set;}
		[DataMember]
		[ProtoMember(9)]
		public string/*(32)*/ ИдентификаторДокументооборота {get;set;}//Идентификатор документооборота
		[DataMember]
		[ProtoMember(10)]
		public V82.Перечисления/*Ссылка*/.ТипыЗаявленияАбонентаСпецоператораСвязи ТипЗаявления {get;set;}//Тип заявления
		[DataMember]
		[ProtoMember(11)]
		public V82.Перечисления/*Ссылка*/.СтатусыЗаявленияАбонентаСпецоператораСвязи Статус {get;set;}
		[DataMember]
		[ProtoMember(12)]
		public V82.СправочникиСсылка.УчетныеЗаписиДокументооборота УчетнаяЗапись {get;set;}//Учетная запись
		[DataMember]
		[ProtoMember(13)]
		public object ТипОрганизации {get;set;}//Тип организации
		[DataMember]
		[ProtoMember(14)]
		public string/*(12)*/ ИНН {get;set;}
		[DataMember]
		[ProtoMember(15)]
		public string/*(9)*/ КПП {get;set;}
		[DataMember]
		[ProtoMember(16)]
		public string/*(255)*/ ПолноеНаименование {get;set;}//Полное наименование
		[DataMember]
		[ProtoMember(17)]
		public string/*(255)*/ КраткоеНаименование {get;set;}//Краткое наименование
		[DataMember]
		[ProtoMember(18)]
		public bool ПризнакУполномоченногоПредставителя {get;set;}//Признак уполномоченного представителя
		[DataMember]
		[ProtoMember(19)]
		public bool ПризнакКрупнейшегоНалогоплательщика {get;set;}//Признак крупнейшего налогоплательщика
		[DataMember]
		[ProtoMember(20)]
		public bool ПризнакОбособленногоПодразделения {get;set;}//Признак обособленного подразделения
		[DataMember]
		[ProtoMember(21)]
		public string/*(240)*/ АдресЮридический {get;set;}//Адрес юридический
		[DataMember]
		[ProtoMember(22)]
		public string/*(240)*/ АдресФактический {get;set;}//Адрес фактический
		[DataMember]
		[ProtoMember(23)]
		public string/*(14)*/ РегНомерПФР {get;set;}//Рег номер ПФР
		[DataMember]
		[ProtoMember(24)]
		public string/*(10)*/ РегНомерФСС {get;set;}//Рег номер ФСС
		[DataMember]
		[ProtoMember(25)]
		public string/*(20)*/ ТелефонОсновной {get;set;}//Телефон основной
		[DataMember]
		[ProtoMember(26)]
		public string/*(20)*/ ТелефонДополнительный {get;set;}//Телефон дополнительный
		[DataMember]
		[ProtoMember(27)]
		public string/*(100)*/ ЭлектроннаяПочта {get;set;}//Электронная почта
		[DataMember]
		[ProtoMember(28)]
		public string/*(60)*/ ВладелецЭЦПФамилия {get;set;}//Владелец ЭЦПФамилия
		[DataMember]
		[ProtoMember(29)]
		public string/*(60)*/ ВладелецЭЦПИмя {get;set;}//Владелец ЭЦПИмя
		[DataMember]
		[ProtoMember(30)]
		public string/*(60)*/ ВладелецЭЦПОтчество {get;set;}//Владелец ЭЦПОтчество
		[DataMember]
		[ProtoMember(31)]
		public string/*(100)*/ ВладелецЭЦПДолжность {get;set;}//Владелец ЭЦПДолжность
		[DataMember]
		[ProtoMember(32)]
		public string/*(100)*/ ВладелецЭЦППодразделение {get;set;}//Владелец ЭЦППодразделение
		[DataMember]
		[ProtoMember(33)]
		public V82.СправочникиСсылка.ДокументыУдостоверяющиеЛичность ВладелецЭЦПВидДокумента {get;set;}//Владелец ЭЦПВид документа
		[DataMember]
		[ProtoMember(34)]
		public string/*(25)*/ ВладелецЭЦПНомерДокумента {get;set;}//Владелец ЭЦПНомер документа
		[DataMember]
		[ProtoMember(35)]
		public string/*(25)*/ ВладелецЭЦПСерияДокумента {get;set;}//Владелец ЭЦПСерия документа
		[DataMember]
		[ProtoMember(36)]
		public DateTime ВладелецЭЦПДатаВыдачиДокумента {get;set;}//Владелец ЭЦПДата выдачи документа
		[DataMember]
		[ProtoMember(37)]
		public string/*(255)*/ ВладелецЭЦПКемВыданДокумент {get;set;}//Владелец ЭЦПКем выдан документ
		[DataMember]
		[ProtoMember(38)]
		public V82.Перечисления/*Ссылка*/.ТипыВладельцевЭЦП ВладелецЭЦПТип {get;set;}//Владелец ЭЦПТип
		[DataMember]
		[ProtoMember(39)]
		public V82.Перечисления/*Ссылка*/.ТипыКриптоПровайдеров ТипКриптопровайдера {get;set;}//Тип криптопровайдера
		[DataMember]
		[ProtoMember(40)]
		public string/*(255)*/ ПутьКонтейнерЗакрытогоКлюча {get;set;}//Путь контейнер закрытого ключа
		[DataMember]
		[ProtoMember(41)]
		public string/*(0)*/ Комментарий {get;set;}
		[DataMember]
		[ProtoMember(42)]
		public string/*(0)*/ СтатусКомментарий {get;set;}//Статус комментарий
		[DataMember]
		[ProtoMember(43)]
		public V82.Перечисления/*Ссылка*/.СпецоператорыСвязи СпецоператорСвязи {get;set;}//Спецоператор связи
		[DataMember]
		[ProtoMember(44)]
		public V82.СправочникиСсылка.Организации Организация {get;set;}
		[DataMember]
		[ProtoMember(45)]
		public DateTime ДатаОтправкиЗаявления {get;set;}//Дата отправки заявления
		[DataMember]
		[ProtoMember(46)]
		public DateTime ДатаПолученияОтвета {get;set;}//Дата получения ответа
		[DataMember]
		[ProtoMember(47)]
		public DateTime ДатаСозданияУчетнойЗаписи {get;set;}//Дата создания учетной записи
		[DataMember]
		[ProtoMember(48)]
		public V82.СправочникиСсылка.Пользователи Ответственный {get;set;}
		[DataMember]
		[ProtoMember(49)]
		public string/*(10)*/ ДополнительныйКодФСС {get;set;}//Дополнительный код ФСС
		[DataMember]
		[ProtoMember(50)]
		public string/*(0)*/ НомерОсновнойПоставки1с {get;set;}//Номер основной поставки1с
		public void Записать()
		{
			//Установка блокировки элемента на горизантально масштабированный кластер.
			//Опционально введение тайм аута на запись одного и того же объекта, не чаще раза в 5-секунд. Защита от спама. упращение алгоритма блокировки.
			//Выделение сервиса для блокировки элемента и генерации кода
			//Выполнение операций контроля без обращений к sql-серверу.
			//Контроль конфликта блокировок.
			//Контроль загрузки булкинсертом гетерогенной коллекции.
			//Контроль уникальности кода для Документов.
			//Контроль уникальности номера для документов, в границах префикса.
			//Контроль владельца, он не может быть группой.
			//Контроль владельца он должен быть задан.
			//Контроль родителя он должен быть группой.
			//Контроль количества уровней, должен соотвествовать метаданным.
			//Контроль версии, объект не должен был быть записан перед чтением текущей записи, алгоритм версионника.
			//Контроль уникальности ссылки
			//Контроль зацикливания
			//Опционально контроль битых ссылок.
			//Соблюдейние транзакционности. ПередЗаписью. Открытие транзации. Валидации. ПриЗаписи. Фиксация транзакции. Информирование о записи элемента.
			using (var Подключение = new SqlConnection(СтрокаСоединения))
			{
				Подключение.Open();
				using (var Команда = Подключение.CreateCommand())
				{
					if(_ЭтоНовый)
					{
						Команда.CommandText = @"
						Insert Into _Document23146(
						_IDRRef
						/*,_Version*/
						,_Marked
						,_IsMetadata
						,_Number
						,_Fld24224
						,_Fld24225RRef
						,_Fld24226RRef
						,_Fld24227RRef
						,_Fld24229
						,_Fld24230
						,_Fld24231
						,_Fld24232
						,_Fld24233
						,_Fld24234
						,_Fld24235
						,_Fld24236
						,_Fld24237
						,_Fld24238
						,_Fld24239
						,_Fld24240
						,_Fld24241
						,_Fld24242
						,_Fld24243
						,_Fld24244
						,_Fld24245
						,_Fld24246
						,_Fld24247
						,_Fld24248RRef
						,_Fld24249
						,_Fld24250
						,_Fld24251
						,_Fld24252
						,_Fld24253RRef
						,_Fld24254RRef
						,_Fld24255
						,_Fld24256
						,_Fld24257
						,_Fld24258RRef
						,_Fld24259RRef
						,_Fld24260
						,_Fld24261
						,_Fld24262
						,_Fld24263RRef
						,_Fld24264
						,_Fld24265)
						Values(
						@Ссылка
						/*,@Версия*/
						,@ПометкаУдаления
						,@Номер
						,@ИдентификаторДокументооборота
						,@ТипЗаявления
						,@Статус
						,@УчетнаяЗапись
						,@ИНН
						,@КПП
						,@ПолноеНаименование
						,@КраткоеНаименование
						,@ПризнакУполномоченногоПредставителя
						,@ПризнакКрупнейшегоНалогоплательщика
						,@ПризнакОбособленногоПодразделения
						,@АдресЮридический
						,@АдресФактический
						,@РегНомерПФР
						,@РегНомерФСС
						,@ТелефонОсновной
						,@ТелефонДополнительный
						,@ЭлектроннаяПочта
						,@ВладелецЭЦПФамилия
						,@ВладелецЭЦПИмя
						,@ВладелецЭЦПОтчество
						,@ВладелецЭЦПДолжность
						,@ВладелецЭЦППодразделение
						,@ВладелецЭЦПВидДокумента
						,@ВладелецЭЦПНомерДокумента
						,@ВладелецЭЦПСерияДокумента
						,@ВладелецЭЦПДатаВыдачиДокумента
						,@ВладелецЭЦПКемВыданДокумент
						,@ВладелецЭЦПТип
						,@ТипКриптопровайдера
						,@ПутьКонтейнерЗакрытогоКлюча
						,@Комментарий
						,@СтатусКомментарий
						,@СпецоператорСвязи
						,@Организация
						,@ДатаОтправкиЗаявления
						,@ДатаПолученияОтвета
						,@ДатаСозданияУчетнойЗаписи
						,@Ответственный
						,@ДополнительныйКодФСС
						,@НомерОсновнойПоставки1с)";
					}
					else
					{
						Команда.CommandText = @"
						Update _Document23146
						Set
						/*_IDRRef	= @Ссылка*/
						/*,_Version	= @Версия*/
						_Marked	= @ПометкаУдаления
						,_Number	= @Номер
						,_Fld24224	= @ИдентификаторДокументооборота
						,_Fld24225RRef	= @ТипЗаявления
						,_Fld24226RRef	= @Статус
						,_Fld24227RRef	= @УчетнаяЗапись
						,_Fld24229	= @ИНН
						,_Fld24230	= @КПП
						,_Fld24231	= @ПолноеНаименование
						,_Fld24232	= @КраткоеНаименование
						,_Fld24233	= @ПризнакУполномоченногоПредставителя
						,_Fld24234	= @ПризнакКрупнейшегоНалогоплательщика
						,_Fld24235	= @ПризнакОбособленногоПодразделения
						,_Fld24236	= @АдресЮридический
						,_Fld24237	= @АдресФактический
						,_Fld24238	= @РегНомерПФР
						,_Fld24239	= @РегНомерФСС
						,_Fld24240	= @ТелефонОсновной
						,_Fld24241	= @ТелефонДополнительный
						,_Fld24242	= @ЭлектроннаяПочта
						,_Fld24243	= @ВладелецЭЦПФамилия
						,_Fld24244	= @ВладелецЭЦПИмя
						,_Fld24245	= @ВладелецЭЦПОтчество
						,_Fld24246	= @ВладелецЭЦПДолжность
						,_Fld24247	= @ВладелецЭЦППодразделение
						,_Fld24248RRef	= @ВладелецЭЦПВидДокумента
						,_Fld24249	= @ВладелецЭЦПНомерДокумента
						,_Fld24250	= @ВладелецЭЦПСерияДокумента
						,_Fld24251	= @ВладелецЭЦПДатаВыдачиДокумента
						,_Fld24252	= @ВладелецЭЦПКемВыданДокумент
						,_Fld24253RRef	= @ВладелецЭЦПТип
						,_Fld24254RRef	= @ТипКриптопровайдера
						,_Fld24255	= @ПутьКонтейнерЗакрытогоКлюча
						,_Fld24256	= @Комментарий
						,_Fld24257	= @СтатусКомментарий
						,_Fld24258RRef	= @СпецоператорСвязи
						,_Fld24259RRef	= @Организация
						,_Fld24260	= @ДатаОтправкиЗаявления
						,_Fld24261	= @ДатаПолученияОтвета
						,_Fld24262	= @ДатаСозданияУчетнойЗаписи
						,_Fld24263RRef	= @Ответственный
						,_Fld24264	= @ДополнительныйКодФСС
						,_Fld24265	= @НомерОсновнойПоставки1с
						Where _IDRRef = @Ссылка";
					}
					Команда.Parameters.AddWithValue("Ссылка", Ссылка.ToByteArray());
					/*Команда.Parameters.AddWithValue("Версия", Версия);*/
					Команда.Parameters.AddWithValue("ПометкаУдаления", ПометкаУдаления);
					Команда.Parameters.AddWithValue("Номер", Номер);
					Команда.Parameters.AddWithValue("ИдентификаторДокументооборота", ИдентификаторДокументооборота);
					Команда.Parameters.AddWithValue("ТипЗаявления", ТипЗаявления.Ключ());
					Команда.Parameters.AddWithValue("Статус", Статус.Ключ());
					Команда.Parameters.AddWithValue("ИНН", ИНН);
					Команда.Parameters.AddWithValue("КПП", КПП);
					Команда.Parameters.AddWithValue("ПолноеНаименование", ПолноеНаименование);
					Команда.Parameters.AddWithValue("КраткоеНаименование", КраткоеНаименование);
					Команда.Parameters.AddWithValue("ПризнакУполномоченногоПредставителя", ПризнакУполномоченногоПредставителя);
					Команда.Parameters.AddWithValue("ПризнакКрупнейшегоНалогоплательщика", ПризнакКрупнейшегоНалогоплательщика);
					Команда.Parameters.AddWithValue("ПризнакОбособленногоПодразделения", ПризнакОбособленногоПодразделения);
					Команда.Parameters.AddWithValue("АдресЮридический", АдресЮридический);
					Команда.Parameters.AddWithValue("АдресФактический", АдресФактический);
					Команда.Parameters.AddWithValue("РегНомерПФР", РегНомерПФР);
					Команда.Parameters.AddWithValue("РегНомерФСС", РегНомерФСС);
					Команда.Parameters.AddWithValue("ТелефонОсновной", ТелефонОсновной);
					Команда.Parameters.AddWithValue("ТелефонДополнительный", ТелефонДополнительный);
					Команда.Parameters.AddWithValue("ЭлектроннаяПочта", ЭлектроннаяПочта);
					Команда.Parameters.AddWithValue("ВладелецЭЦПФамилия", ВладелецЭЦПФамилия);
					Команда.Parameters.AddWithValue("ВладелецЭЦПИмя", ВладелецЭЦПИмя);
					Команда.Parameters.AddWithValue("ВладелецЭЦПОтчество", ВладелецЭЦПОтчество);
					Команда.Parameters.AddWithValue("ВладелецЭЦПДолжность", ВладелецЭЦПДолжность);
					Команда.Parameters.AddWithValue("ВладелецЭЦППодразделение", ВладелецЭЦППодразделение);
					Команда.Parameters.AddWithValue("ВладелецЭЦПНомерДокумента", ВладелецЭЦПНомерДокумента);
					Команда.Parameters.AddWithValue("ВладелецЭЦПСерияДокумента", ВладелецЭЦПСерияДокумента);
					Команда.Parameters.AddWithValue("ВладелецЭЦПДатаВыдачиДокумента", ВладелецЭЦПДатаВыдачиДокумента);
					Команда.Parameters.AddWithValue("ВладелецЭЦПКемВыданДокумент", ВладелецЭЦПКемВыданДокумент);
					Команда.Parameters.AddWithValue("ВладелецЭЦПТип", ВладелецЭЦПТип.Ключ());
					Команда.Parameters.AddWithValue("ТипКриптопровайдера", ТипКриптопровайдера.Ключ());
					Команда.Parameters.AddWithValue("ПутьКонтейнерЗакрытогоКлюча", ПутьКонтейнерЗакрытогоКлюча);
					Команда.Parameters.AddWithValue("Комментарий", Комментарий);
					Команда.Parameters.AddWithValue("СтатусКомментарий", СтатусКомментарий);
					Команда.Parameters.AddWithValue("СпецоператорСвязи", СпецоператорСвязи.Ключ());
					Команда.Parameters.AddWithValue("ДатаОтправкиЗаявления", ДатаОтправкиЗаявления);
					Команда.Parameters.AddWithValue("ДатаПолученияОтвета", ДатаПолученияОтвета);
					Команда.Parameters.AddWithValue("ДатаСозданияУчетнойЗаписи", ДатаСозданияУчетнойЗаписи);
					Команда.Parameters.AddWithValue("ДополнительныйКодФСС", ДополнительныйКодФСС);
					Команда.Parameters.AddWithValue("НомерОсновнойПоставки1с", НомерОсновнойПоставки1с);
					Команда.ExecuteNonQuery();
				}
			}
		}
		public void Удалить()
		{
			using (var Подключение = new SqlConnection(СтрокаСоединения))
			{
				Подключение.Open();
				using (var Команда = Подключение.CreateCommand())
				{
					Команда.CommandText = @"Delete _Document23146
					Where _IDRRef=@Ссылка";
					Команда.Parameters.AddWithValue("Ссылка", Ссылка.ToByteArray());
					Команда.ExecuteNonQuery();
				}
			}
		}
	}
}